import Http from './mod.http';
import HttpData from './mod.http.deal';
import Dialog from './vue.dialog';
import Storage from './mod.storage';
import StringUtils from './mod.string';

const Obj = {
  config: function (context, params) {
    var appId = params.appId;
    var timestamp = params.timestamp;
    var nonceStr = params.nonceStr;
    var signature = params.signature;
    var configParams = {
      // debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来，若要查看传入的参数，可以在pc端打开，参数信息会通过log打出，仅在pc端时才会打印。
      debug: false,
      appId: appId, // 必填，公众号的唯一标识
      timestamp: timestamp, // 必填，生成签名的时间戳
      nonceStr: nonceStr, // 必填，生成签名的随机串
      signature: signature,// 必填，签名
      jsApiList: [
        'chooseImage',
        'previewImage',
        'uploadImage',
        'downloadImage'
      ] // 必填，需要使用的JS接口列表
    };
    wx.config(configParams);
    return configParams;
  },
  chooseImage: function (context, params) {
    var maximum = params.maximum ? params.maximum : 9;
    var successHandler = params.success ? params.success : null;
    wx.chooseImage({
      count: maximum, // 默认9
      sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图，默认二者都有
      sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机，默认二者都有
      success: function (res) {
        if (successHandler != null) {
          successHandler(res);
        }
        // var localIds = res.localIds; // 返回选定照片的本地ID列表，localId可以作为img标签的src属性显示图片
      }
    });
  },
  previewImage: function (context, params) {
    wx.previewImage({
      current: '', // 当前显示图片的http链接
      urls: [] // 需要预览的图片http链接列表
    });
  },
  uploadImage: function (context, params) {
    // 备注：上传图片有效期3天，可用微信多媒体接口下载图片到自己的服务器，此处获得的 serverId 即 media_id。
    var path = params.path ? params.path : '';
    var successHandler = params.success ? params.success : null;
    var errorHandler = params.error ? params.error : null;

    wx.uploadImage({
      localId: path, // 需要上传的图片的本地ID，由chooseImage接口获得
      isShowProgressTips: 1, // 默认为1，显示进度提示
      success: function (res) {
        var serverId = res.serverId; // 返回图片的服务器端ID
        var testParams = {
          url: Http.kInterfacePath.file.wechatImage,
          data: {
            id: serverId
          },
          success: function (res) {
            if (res.result == 0) {
              var resData = res.data ? res.data : '';
              if (successHandler != null) {
                successHandler(resData);
              } else {
                Dialog.toast(context, {text: '该' + serverId + '图片上传成功'});
              }
            } else {
              if (errorHandler != null) {
                errorHandler(res);
              } else {
                Dialog.toast(context, {text: '该' + serverId + '图片上传失败'});
              }
            }
          },
        };
        Http.ajax(context, testParams);
      }
    });
  },
  downloadImage: function (context, params) {
    wx.downloadImage({
      serverId: '', // 需要下载的图片的服务器端ID，由uploadImage接口获得
      isShowProgressTips: 1, // 默认为1，显示进度提示
      success: function (res) {
        var localId = res.localId; // 返回图片下载后的本地ID
      }
    });
  },
  getLocalImgData: function (context, params) {
    // 备注：此接口仅在 iOS WKWebview 下提供，用于兼容 iOS WKWebview 不支持 localId 直接显示图片的问题。具体可参考《iOS网页开发适配指南》
    wx.getLocalImgData({
      localId: '', // 图片的localID
      success: function (res) {
        var localData = res.localData; // localData是图片的base64数据，可以用img标签显示
      }
    });
  },

  // 获取地理位置
  getLocation: function (context, params) {
    var successHandler = params.success ? params.success : null;
    var errorHandler = params.error ? params.error : null;
    try {
      wx.getLocation({
        type: 'wgs84', // 默认为wgs84的gps坐标，如果要返回直接给openLocation用的火星坐标，可传入'gcj02'
        success: function (res) {
          if (successHandler != null) {
            successHandler(res);
          }
          // var latitude = res.latitude; // 纬度，浮点数，范围为90 ~ -90
          // var longitude = res.longitude; // 经度，浮点数，范围为180 ~ -180。
          // var speed = res.speed; // 速度，以米/每秒计
          // var accuracy = res.accuracy; // 位置精度
        },
        error: function (error) {
          if (errorHandler != null) {
            errorHandler(error);
          }
        }
      });
    } catch (exception) {
      console.log(exception);
    }
  },

  signature: function (context, params) {
    var routerUrl = params.url ? params.url : '';
    var successHandler = params.success ? params.success : null;
    var errorHandler = params.error ? params.error : null;
    var data = {
      url: routerUrl
    };
    var params = {
      url: Http.kInterfacePath.wechat.signature,
      type: Http.httpType.get,
      data: data,
      success: _successSignature
    };
    Http.ajax(context, params);

    function _successSignature(res) {
      var isAvail = HttpData.isAvailable(context, res);
      if (isAvail) {
        if (res.result == 0) {
          var resData = res.data ? res.data : null;
          if (resData != null) {
            var sucParams = {
              appId: resData.appid,
              timestamp: resData.timestamp,
              nonceStr: resData.noncestr,
              signature: resData.signature,
            };
            successHandler(sucParams);
          }
        } else {
          if (errorHandler != null) {
            errorHandler(res);
          } else {
            Dialog.toast(context, {text: '获取签名失败！'});
          }
        }
      } else {
        if (errorHandler != null) {
          errorHandler(res);
        } else {
          Dialog.toast(context, {text: '返回数据格式不对'});
        }
      }
    }
  },
  user: function (context, params) {
    var isFirst = params.first ? params.first : false;
    var openid = params.openid ? params.openid : '';
    var successHandler = params.success ? params.success : null;
    var errorHandler = params.error ? params.error : null;

    function httpGetUserInfo(_openid, _successHandler, _errorHandler) {
      var data = {
        openid: _openid,
      };
      var ajaxParams = {
        url: Http.kInterfacePath.user.query,
        type: Http.httpType.get,
        data: data,
        success: _successQuery
      };
      Http.ajax(context, ajaxParams);
      context.$f7.preloader.show();

      function _successQuery(res) {
        context.$f7.preloader.hide();
        var isAvail = HttpData.isAvailable(context, res);
        if (isAvail) {
          if (res.result == 0) {
            var resData = res.data ? res.data : null;
            if (resData != null) {
              var userInfo = {
                id: resData.id ? resData.id : -1,
                openid: resData.openid ? resData.openid : '',
                name: resData.nickname ? resData.nickname : '',
                avatar: resData.headimgurl ? resData.headimgurl : '',
                department: {
                  id: resData.department_id ? resData.department_id : -1,
                  name: resData.department_name ? resData.department_name : ''
                }
              };
              Storage.local.set('sd_wechat_uid', userInfo.id);
              Storage.local.set('sd_user_' + openid, StringUtils.toStr(userInfo));
              if (_successHandler != null) {
                _successHandler(userInfo);
              }
            }
          } else {
            if (_errorHandler != null) {
              _errorHandler(res);
            } else {
              Dialog.toast(context, {text: '获取用户信息失败！'});
              return false;
            }
          }
        } else {
          if (_errorHandler != null) {
            _errorHandler(res);
          } else {
            Dialog.toast(context, {text: '返回数据格式不对'});
            return false;
          }
        }
      }
    }

    if (isFirst) {
      httpGetUserInfo(openid, successHandler, errorHandler);
    } else {
      var localInfo = Storage.local.get('sd_user_' + openid);
      localInfo = localInfo ? localInfo : '';
      if (localInfo != '') {
        var infoObj = StringUtils.toJson(localInfo);
        if (successHandler != null) {
          successHandler(infoObj);
        }
      } else {
        httpGetUserInfo(openid, successHandler, errorHandler);
      }
    }
  },
};
export default Obj;
